// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import qs from 'qs'
import axios from 'axios'
import router from './router'
import VueRouter from 'vue-router'
import store from './store'
import ElementUI from "element-ui"
import 'element-ui/lib/theme-chalk/index.css'

Vue.config.productionTip = false

Vue.use(VueRouter)
Vue.use(ElementUI)
Vue.prototype.$qs = qs
Vue.prototype.$axios = axios

//定义全局默认配置所有的请求头中都带上Authorization的token
axios.defaults.headers.common['Authorization'] = ''


Vue.prototype.$request = function (config) {

  const instance = axios.create({
    baseURL: 'http://localhost/',
    timeout: 6000
  });

  // 所有请求到达后台前要经过请求拦截器
  instance.interceptors.request.use(
    config => {
      console.log('请求拦截器config', '拦截url[' + config.url + ']', config)
      //判断浏览器是否有token.如果有token,带上token
      if (config.url !== 'user/login') {
        console.log(1)
        // 在发送请求之前判断.如果不是登录请求,需要校验token
        if (sessionStorage.getItem('Authorization')) {
          console.log(2)
          config.headers.Authorization = sessionStorage.getItem('Authorization')
        } else {
          console.log(3)
          this.$router.push('/');//如果没token,跳转到登录页
        }
      }
      return config;
    }, err => {
      console.error('请求拦截器err,拦截url[' + config.url + ']')
      // 对请求错误做些什么
      return Promise.reject(err);
    });
  //所有响应返回之前要经过axios响应拦截器
  instance.interceptors.response.use(
    res => {
      console.log('响应拦截器res', res)
      if (res.config.url !== 'user/login') {
        if (res.data.code === 200) {					//如果服务器对用户验证通过返回“S”成功标签就将用户需要的数据传递给请求的地方
          console.log(6)
          return res
        } else {
          console.log(7)
          //如果服务器对用户验证不通过，清空浏览器中可能是失效了得token并跳转到登陆界面
          sessionStorage.removeItem('Authorization');
          this.$router.push('/');
          return res
        }
      } else {
        return res
      }
    },
    err => {
      console.log(8)
      console.error('响应拦截器err')
      //如果服务器对用户验证不通过，清空浏览器中可能是失效了得token并跳转到登陆界面
      sessionStorage.removeItem('Authorization');
      this.$router.push('/');
    });

  return instance(config);
}


//路由跳转之前进行判断
router.beforeEach((to, from, next) => {
  if (to.path === '/') {			//每次页面路由跳转的时候进行判断，如果是跳转到登陆界面就直接放行
    next()
  } else {
    let token = sessionStorage.getItem('Authorization')
    if (!token) {	//如果是跳转到其他页面，先判断token是否为空或者是否存在，不存在就跳转到登陆界面重新登陆
      console.log('token缺失.跳转至登录页')
      next('/')
    } else {	//如果有token直接放行
      next()
    }
  }
})


new Vue({
  el: '#app',
  router,
  store,
  components: {App},
  template: '<App/>'
})
